This invention relates to a method and means for implementing program storage and retrieval in a computer and more particularly to improvements therein.
Computers of early origin were memory address oriented, that is, programs were written in which control instructions for looping and conditional branching directed the machine to commence its program sequence at a specified memory address and direct further operations by providing specific addresses. When it became clear that what was needed was not for the program to resume execution at a given memory address, but rather at a given program step, assembly programs were written which would automatically allocate a memory address for the program such that entry points could be specified at a program step than rather at a memory address. This arrangement brought its own set of problems. Since the programmer could branch from any point in the program to any other point, programmers wrote programs to be as compact as possible. This would entail using a given segment of a code for three or four given sections of the operation by branching to it from one place and out to another place. When problems arose they were fixed by branching to a program segment which contained a "patch" for fixing the program, after which the machine was directed to switch back to the original program. After several generations of fixes such a program was totally opaque.
The technique for assembling a large software project was to conceptually break a problem to pieces and then assign the pieces to separate programmers. They would write the software for their piece and then the headache of assembling the programs which were written would occur. Since one programmer did not know precisely what others would be doing, conventions would be mixed, locations would be used for several purposes that were mutually inconsistent, therefore the problem of integrating several bundles of software into a single larger one would involve a large number of headaches, a larger number of fixes, and basically would result in a mountain of software which if not unworkable, was unwieldy and inefficient. Since it was known that the slightest change to the software might blow the entire process, everyone was reluctant to change anything.
Recently the concept of structured programming was introduced which, when correctly implemented, has been capable of reducing, by orders of magnitude, the uncertainties and complexities associated with writing large software programs. The basic philosophy of the technique is to design from the top down the entire program to specify at the beginning, in precise terms, what is attempted to be done and what each building block at each level of program will have to do. Basically, the most prominent use of computing machinery is for controlling processes. The process may be a solution of an arithmetic problem, the operation of an oil refinery or a power plant, or the maintenance of a data base. Whatever the case, the central role of computer itself is to oversee and control the process. In the course of this, all the data related to this process must be handled, examined, stored, and modified into the format in which it is useful, either to the computer itself or to the human being which must interact with the process and its controller.
Finally, most importantly, a modern piece of computing machinery must allow a human being to test and modify the process in whatever way he choses and with the greatest ease possible. This is a most difficult, yet most important requirement.